package com.express.service.impl;

import com.express.dao.ExpressMapper;
import com.express.service.ExpressService;
import org.springframework.stereotype.Service;
import pojo.Express;

import javax.annotation.Resource;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Service
public class ExpressServiceImpl implements ExpressService {

    @Resource
    ExpressMapper expressMapper;

    /**
     * 查询全部数据
     *
     * @return
     */
    @Override
    public List<Express> findAll() {
        List<Express> expressList = expressMapper.selectAll();
        return expressList;
    }

    /**
     * 通过快递编号进行查询数据
     *
     * @param id
     * @return
     */
    @Override
    public Express findById(Integer id) {
        Express express = expressMapper.selectByPrimaryKey(id);
        return express;
    }

    /**
     * 添加快递
     *
     * @param express
     */
    @Override
    public void add(Express express) {
        expressMapper.insert(express);
    }

    /**
     * 通过快递编号进行删除
     *
     * @param id
     */
    @Override
    public void deleteById(Integer id) {
        expressMapper.deleteByPrimaryKey(id);
    }

    /**
     * 快递的更新操作
     *
     * @param express
     */
    @Override
    public void update(Express express) {
        expressMapper.updateByPrimaryKey(express);
    }

    /**
     * 用户的取件操作
     *
     * @param checkCode
     */
    @Override
    public void deleteByCheckCode(Integer checkCode) {
        // 通过按照取货吗去修改对应的状态码

        // 再取货之前，我们要先判断一下，该货物是否存在，如果不存在就不能执行
        Integer state = expressMapper.findStateByCheckCode(checkCode);

        // 进行判断，如果货物不存在就返回异常
        if (state == 0) {
            throw new RuntimeException("货物不存在");
        }

        expressMapper.deleteByCheckCode(checkCode);
    }

    /**
     * 查询对应的取货码
     *
     * @param id
     * @return
     */
    @Override
    public Integer findCheckCodeById(Integer id) {
        return expressMapper.findCheckCodeById(id);
    }

    /**
     * 查询仓库并统计货物总量
     *
     * @return
     */
    @Override
    public Integer getSUM() {
        return expressMapper.getSUM();
    }

    /**
     * 查询全部的超强货物
     *
     * @return
     */
    @Override
    public List<Express> findOutTimeAll() {
        // 得到全部的数据
        List<Express> all = expressMapper.selectAll();

        // 该集合用于存放我们的超期快递的集合
        List<Express> expressList = new ArrayList<>();

        // 获取当前的时间
        LocalDateTime now = LocalDateTime.now();
        Duration duration;

        // 对集合进行遍历,得到每一个快递信息
        for (Express express : all) {
            // 获取该快递的入库时间
            LocalDateTime deliveryTime = express.getDeliveryTime();

            duration = Duration.between(deliveryTime, now);

            long day = duration.toDays();
            // 对每一个信息进行判断，他的日期是否超过了15天
            if (day >= 15) {
                expressList.add(express);
            }
        }
        return expressList;
    }

}
